//------------------------------------------------------------------------------ 
//      Copyright (c) 2004-2009, Be Nanashi-San 
// 
//      Permission is hereby granted, free of charge, to any person obtaining a 
//      copy of this software and associated documentation files (the "Software"), 
//      to deal in the Software without restriction, including without limitation 
//      the rights to use, copy, modify, merge, publish, distribute, sublicense, 
//      and/or sell copies of the Software, and to permit persons to whom the 
//      Software is furnished to do so, subject to the following conditions: 
// 
//      The above copyright notice and this permission notice shall be included in 
//      all copies or substantial portions of the Software. 
// 
//      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
//      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
//      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
//      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
//      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
//      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
//      DEALINGS IN THE SOFTWARE. 
// 
//      File Name:   2chPositive.h
//      Author:      Be Nanashi-San 
//      Description: 2chPositive application class. 
//------------------------------------------------------------------------------
#ifndef NICHPOSITIVE_H_INCLUDED
#define NICHPOSITIVE_H_INCLUDED

#include <Application.h>
#include <String.h>

//Conection Mode
const bool	kONLINE = false;
const bool	kOFFLINE = true;

class mainWindow;
class FindWindow;
class JumpWindow;
class PrefWindow;
class ThreadWriteWindow;
class BBSHandler;
class BPopUpMenu;

class a2chViewer : public BApplication 
{
public:
	a2chViewer();
	status_t Alert();
	status_t OffLineAlert();

	//Reader
	BBSHandler * CurReader();
	void MakeReaderList(BPopUpMenu *aMenu);
	void SetCurReader(const char *name);

private:
	bool QuitRequested();
	void MessageReceived(BMessage *message);
	void ArgvReceived(int32 argc, char** argv);
	void RefsReceived(BMessage *message);
	void PostBookmark(const char *url);
	void AboutRequested();
	void DoFind(BMessage *message, bool findagain);
	void OpenWriteThreadWindow(BMessage *message);

	//Reader
	void LoadReader();
	void ReleaseReader();

	void MakeSettingDir();
	void MakeDefault();
	void NotImplemented();
	
	mainWindow *fMainWindow;
	FindWindow *fFindWindow;
	JumpWindow *fJumpWindow;
	PrefWindow *fPrefWindow;
	ThreadWriteWindow *fWriteWindow;
	int32 fTarget;
	BString fFindString;
	BList *fReaderList;
	BBSHandler *fCurReader;
};

template <class T>
void openWindow(T *target)
{
	if(!target)
		target = new T();
	target->Show();
}

#endif //NICHPOSITIVE_H_INCLUDED
